package com.example.java.utils;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

// 此类仅包含操作或返回集合的静态方法
public class CollectionsMain {
    public static void main(String[] args) {
        // 创建一个 Integer 类型的 List
        List<Integer> list = Arrays.asList(1, 3, 2, 5, 4); // 创建一个 Integer 类型的 List
        // 以下操作均基于此 List
        // 1. 反转 List
        Collections.reverse(list);
        list.forEach(System.out::println); // 输出反转后的 List
        System.out.println("--------------------");
        // 2. 排序 List
        Collections.sort(list); // 对集合进行排序
        list.forEach(System.out::println);

        System.out.println("--------------------");
        // 3. 随机排序 List
        Collections.shuffle(list); // 对集合进行随机排序
        list.forEach(System.out::println);
        System.out.println("--------------------");
        // 使用指定随机源随机排列指定列表
        Collections.shuffle(list, new java.util.Random(123)); // 使用指定随机源随机排列指定列表
        list.forEach(System.out::println);

        System.out.println("--------------------");
        // 4. 获得 List 的最大值和最小值
        System.out.println("最大值：" + Collections.max(list));
        System.out.println("最小值：" + Collections.min(list));
        System.out.println("--------------------");

        // 5. 返回由指定列表支持的同步（线程安全）列表
        List<Integer> integerList = Collections.synchronizedList(list); // 获得一个同步的 List
        System.out.println("第一个元素：" + integerList.getFirst());
        System.out.println("最后一个元素：" + integerList.getLast());

        System.out.println("--------------------");
        // 6. 返回指定列表的不可修改视图
        List<Integer> unmodifiableList = Collections.unmodifiableList(list); // 获得一个只读的 List
        unmodifiableList.forEach(System.out::println); // 输出不可修改的 List
    }
}

// 关于 Collections 集合操作工具类的相关的使用参考官方文档 https://java.cunzaima.cn/jdk21/doc-zh/api/java.base/java/util/Collections.html